package handler

import (
	"admin-nexus-backend/internal/dto"
	"admin-nexus-backend/internal/service"
	"admin-nexus-backend/pkg/response"

	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

type UserOperationLogHandler struct {
	logService *service.UserOperationLogService
}

func NewUserOperationLogHandler(db *gorm.DB) *UserOperationLogHandler {
	return &UserOperationLogHandler{
		logService: service.NewUserOperationLogService(db),
	}
}

// GetUserOperationLogList 获取用户操作日志列表
// @Summary 获取用户操作日志列表
// @Description 分页查询用户操作日志列表
// @Tags 用户管理
// @Security ApiKeyAuth
// @Produce json
// @Param page query int true "页码"
// @Param pageSize query int true "每页数量"
// @Param userId query int false "用户ID"
// @Param title query string false "标题"
// @Param url query string false "URL"
// @Param ip query string false "IP地址"
// @Success 200 {object} response.Response{data=dto.PageResult}
// @Router /api/v1/user/operation-logs [get]
func (h *UserOperationLogHandler) GetUserOperationLogList(c *gin.Context) {
	var params dto.UserOperationLogQueryParams
	if err := c.ShouldBindQuery(&params); err != nil {
		response.Error(c, "参数错误")
		return
	}

	// 如果未指定用户ID，则获取当前登录用户的操作日志
	userID := c.GetUint("userId")
	if params.UserID == nil || *params.UserID == 0 {
		params.UserID = &userID
	} else {
		// 如果指定了用户ID，检查是否是当前用户（普通用户只能查看自己的日志）
		// 这里可以根据权限判断，暂时允许查看自己的日志
		if *params.UserID != userID {
			// 可以在这里添加权限检查，比如只有管理员才能查看其他用户的日志
			// 暂时允许查看自己的日志
			params.UserID = &userID
		}
	}

	result, err := h.logService.GetUserOperationLogList(&params)
	if err != nil {
		response.Error(c, "获取操作日志失败")
		return
	}

	response.SuccessWithData(c, result)
}
